/*
day244
2020.4.28
*/ 
#include<cstdlib>
using namespace std;

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
    bool isValidBST(TreeNode* root) {
    	if(!root || !root->left && !root->right)
    	{
    		return true;
		}
		return help(root,INT_MIN,INT_MAX);
    }
    
    bool help(TreeNode *root,int min,int max)
    {
    	if(!root )
    	{
    		return true;
		}
		
		if(root->val>max || root->val<min)
		{
			return false;
		}
		
		bool l=false,r=false;
		if(!root->left)
		{
			l=true;
		}
		else
		{
			if(root->val==INT_MIN)
			{
				l=false;
			}
			else
			{
				l=help(root->left,min,root->val-1);
			}
		}	
		
		if(!root->right)
		{
			r=true;
		}
		else
		{
			if(root->val==INT_MAX)
			{
				r=false;
			}
			else
			{
				r=help(root->right,root->val+1,max);
			}
		}	
		
		return l && r;
	}
};


int main()
{
	return 0;
}







